home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / editbase.d < prev    next >
Text File  |  1997-10-26  |  5KB  |  126 lines

  1. DEFINITION MODULE EditBase;
  2.  
  3. FROM SYSTEM    IMPORT ADDRESS;
  4.  
  5. FROM EditTypes IMPORT EDITPTR, aBufferPtr;
  6.  
  7. TYPE Error = (notFound, notEnoughMem, lineToLong);
  8.  
  9. CONST   memBlockSize = $7FE0;       (* Gr”že der einzelnen Bl”cke im Editor *)
  10.  
  11. VAR eReason : Error;
  12.  
  13. PROCEDURE InsertBuffer (VAR ed : EDITPTR; VAR buff : ADDRESS; len : LONGCARD; freeBuffer: BOOLEAN): BOOLEAN;
  14. (* Es wird ein Text aus einem Buffer in ed an der aktuellen Stelle eingefgt.
  15.  *)
  16.  
  17. PROCEDURE CopyToBuff(VAR ed : EDITPTR; tStartLine, tEndLine : LONGINT; 
  18.                      VAR addBuf : ADDRESS; VAR len : LONGCARD) : BOOLEAN;
  19. (* Kopieren von einem EditBuffer in einen anderen.
  20.  * Es wird der aus dem Editor in addBuf der Bereich von 
  21.  * tStartLine bis tEndLine kopiert.
  22.  * Neue Fassung, die alles in einen Block kopiert und nicht in n kleine Bl”cke.
  23.  *)
  24.  
  25. (*
  26. PROCEDURE CopyFromBuff(VAR ed : EDITPTR; tStartLine : LONGINT; addBuf : aBufferPtr; prev : BOOLEAN) : BOOLEAN;
  27. (* Kopieren von einem EditBuffer in einen anderen.
  28.  * Es wird der Sourcebuffer hinter die Zeile 
  29.  * tStartLine angeh„ngt.
  30.  *)
  31. *)
  32.  
  33. PROCEDURE GetOffset (VAR ed : EDITPTR) : INTEGER;
  34. (* Setzt Buffer auf CurrentLine und berechnet Offset in 
  35.  * currentBuffer fr currLineNr und currRow
  36.  *)
  37.  
  38. PROCEDURE GetPos (VAR ed : EDITPTR; offset : INTEGER; VAR line : LONGINT; VAR row : INTEGER);
  39. (* Berechnet aus Offset in currentBuff die aktuelle
  40.  * Zeile und Spalte
  41.  *)
  42.  
  43. PROCEDURE GetLineLength (VAR ed : EDITPTR; lineNum : LONGINT; VAR len : INTEGER) : BOOLEAN;
  44. (* Liefert die L„nge der Zeile lineNum
  45.  * FALSE: Zeile nicht vorhanden.
  46.  *)
  47.  
  48. PROCEDURE GetLineAdr (VAR ed : EDITPTR; lineNum : LONGINT; VAR text : ADDRESS; VAR len : INTEGER) : BOOLEAN;
  49. (* Liefert die Adresse der Zeile und die L„nge.
  50.  * Nur fr Lesezugriff!
  51.  * FALSE: Zeile nicht vorhanden
  52.  *)
  53.  
  54. PROCEDURE GetLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; VAR len : INTEGER) : BOOLEAN;
  55. (* Holt die Zeile lineNum aus der Bufferliste 
  56.  * FALSE: Entweder ist der String str fr die Zeile zu kurz,
  57.  *        dann steht in len schon die ben”tigte L„nge,
  58.  *        oder die Zeile existiert nicht, dann ist len = 0.
  59.  *)
  60.  
  61. PROCEDURE PutLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; len : INTEGER) : BOOLEAN;
  62. (* Ersetzt eine Zeile im Buffer.
  63.  * FALSE: Entweder Zeile ist nicht vorhanden, oder es ist nicht mehr
  64.  * genug Speicher da, um die Zeile einzufgen.
  65.  * Im zweiten Fall sollte man ein CompactBuffer aufrufen und 
  66.  * es dann nochmal versuchen.
  67.  * Grund steht in der globalen Variable eReason.
  68.  *)
  69.  
  70. PROCEDURE InsertCr (VAR ed : EDITPTR; lineNum : LONGINT; row : INTEGER) : BOOLEAN;
  71. (* Trennt die Zeile lineNum an der Stelle row auf.
  72.  * FALSE: Kein Speicherplatz mehr frei.
  73.  *)
  74.  
  75. PROCEDURE InsertLine (VAR ed : EDITPTR; lineNum : LONGINT; VAR str : ARRAY OF CHAR; pre : BOOLEAN; len : INTEGER) : BOOLEAN;
  76. (* Fgt die Zeile lineNum im Buffer ein.
  77.  * Wenn pre = TRUE ist, dann wird die Zeile vor die alte Zeile lineNum gesetzt,
  78.  * ansonsten hinter die Zeile lineNum.
  79.  * Ergebnis: FALSE: Nicht genug Speicher mehr frei
  80.  *) 
  81.  
  82. PROCEDURE DeleteSomeLines (VAR ed : EDITPTR; from, to : LONGINT) : BOOLEAN;
  83. (* L”scht einen Bereich von Zeilen ber mehrere Bl”cke hinweg 
  84.  * Dabei wird mittels deleteLineBlock in den „užeren Bl”cken 
  85.  * gel”scht und die inneren Bl”cke entfernt.
  86.  *)
  87.  
  88. PROCEDURE DeleteLine (VAR ed : EDITPTR; lineNum : LONGINT) : BOOLEAN;
  89. (* L”scht die Zeile lineNum im Buffer
  90.  * FALSE: Zeile nicht vorhanden 
  91.  *)
  92.  
  93. PROCEDURE CompactBuffer (VAR ed : EDITPTR) : BOOLEAN;
  94. (* Kompaktiert den Bufferspeicher. FALSE: Nicht mehr m”glich, da
  95.  * gar kein Speicher mehr frei war.
  96.  *)
  97.  
  98. PROCEDURE GetCurrLine (VAR ed : EDITPTR; VAR str : ARRAY OF CHAR; VAR len : INTEGER);
  99. (* Liefert die aktuelle Zeile, in der der Cursor steht.
  100.  *)
  101.  
  102. PROCEDURE PutCurrLine (VAR ed : EDITPTR) : BOOLEAN;
  103. (* Schiebt die aktuelle Zeile, in der der Cursor steht, wieder in den Buffer.
  104.  * FALSE: Kein Speicher mehr frei
  105.  *)
  106.  
  107. PROCEDURE GetBuffer (VAR ed : EDITPTR; defSize : INTEGER) : BOOLEAN;
  108. (* Erzeugt einen neuen Buffer hinter currentBuff
  109.  * Es wird nur der Textbuffer und der Descriptor alloziert,
  110.  * das LineArray noch nicht.
  111.  * Der Buffer erh„lt die Gr”že defSize, falls dieser Wert sinnvoll ist.
  112.  *)
  113.  
  114. PROCEDURE FreeBuffer (VAR ed : EDITPTR);
  115. (* H„ngt aktuellen Buffer (currentBuff) aus Liste aus
  116.  * und gibt alle Speicherbl”cke frei.
  117.  * Es wird keine Prfung vorgenommen, ob noch Text enthalten ist!
  118.  *)
  119.  
  120. PROCEDURE CountBytes (VAR ed: EDITPTR; fromLine : LONGINT; fromRow: INTEGER;
  121.                       toLine: LONGINT; toRow: INTEGER; VAR bytes: LONGCARD);
  122. (* Z„hlt die Bytes, die von dem Text zwischen den beiden Textmarken belegt werden
  123.  *)
  124.  
  125. END EditBase.
  126.